package com.yingjie.yingjieuser.controller;

import com.yingjie.commonbase.commons.ReturnObject;
import com.yingjie.commonbase.model.User;
import com.yingjie.commonsecurity.AuthUserContext;
import com.yingjie.yingjieuser.common.CouplesStatus;
import com.yingjie.commonbase.model.Couples;
import com.yingjie.yingjieuser.service.CouplesService;
import com.yingjie.yingjieuser.service.UserService;
import com.yingjie.yingjieuser.vo.AppayCouplesInfoVO;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/couple")
public class CouplesController {

    @Resource
    private UserService userService;
    @Resource
    private CouplesService couplesService;
    //   发起关联用户情侣关系
    @PostMapping("/relevancy")
    public ReturnObject relevancy(@RequestBody Couples couples){
        Integer userId = AuthUserContext.get().getUserId();
        couples.setMyUserId(userId);

        if(couples.getMyUserId().equals(couples.getToUserId())){
            return ReturnObject.ERROR("不能关联自己");
        }

        User user = userService.getUserInfo(couples.getToUserId());
        if(user==null){
            return ReturnObject.ERROR("无此用户");
        }
        //查看该用户是否 已经和别人关联
        Boolean isCopul = couplesService.seeUserIsCouples(couples.getToUserId());
        if(isCopul){
            return ReturnObject.ERROR("此用户已经别人是情侣");
        }
        //关联情侣关系
        couples.setStatus(CouplesStatus.APPLYING);
        couples.setCreatedAt(new Date());
        Integer result = couplesService.relevancy(couples);

        return ReturnObject.SUCCESS();
    }
    //获取情侣信息
    @PostMapping("/getCouplesInfo")
    public ReturnObject getCouplesInfo(){
        Integer userId = AuthUserContext.get().getUserId();
        //获取情侣关系信息
        Couples couples = couplesService.getCouplesInfo(userId);

        //获取情侣的用户信息
        User couplesUserInfo = null;
        Map map = new HashMap<>();
        if(couples!=null){
            //调换一下位置 让自己总是myUserID
            if(couples.getToUserId().equals(userId)){
                Integer touserId = couples.getMyUserId();
                couples.setMyUserId(userId);
                couples.setToUserId(touserId);
            }
           couplesUserInfo = userService.getUserInfo(couples.getToUserId());
            //确认关系后 返回情侣信息
            if(couples.getStatus()==CouplesStatus.APPLY_OK){
                map.put("couples",couples);
                map.put("couplesUserInfo",couplesUserInfo);
            }else{
                map.put("couples",null);
                map.put("couplesUserInfo",null);
            }
        }else{
            map.put("couples",null);
            map.put("couplesUserInfo",null);
        }
        return ReturnObject.SUCCESS(map);
    }

    //查询对我的情侣申请信息
    @PostMapping("/appayCouplesInfo")
    public ReturnObject appayCouplesInfo(){
        Integer userId = AuthUserContext.get().getUserId();

        ArrayList<AppayCouplesInfoVO> appayCouplesInfoVOS = couplesService.appayCouplesInfo(userId);


        return ReturnObject.SUCCESS(appayCouplesInfoVOS);
    }


    //答复情侣情侣申请 （同意或拒绝）
    @PostMapping("/confirmCouples")
    public ReturnObject confirmCouples(@RequestBody Couples couples){
        Integer userId = AuthUserContext.get().getUserId();

        if(couples.getStatus()==CouplesStatus.APPLY_OK||couples.getStatus()==CouplesStatus.APPLY_NO){

            //如果同意
            if(couples.getStatus()==CouplesStatus.APPLY_OK){
                //检查一下对方是否已经有情侣
                Couples appayUserCouple = couplesService.getCouplesInfo(couples.getMyUserId());
                if(appayUserCouple!=null&&appayUserCouple.getStatus()==CouplesStatus.APPLY_OK){
                    return ReturnObject.ERROR("对方已有情侣");
                }


            }
            Integer res = couplesService.confirmCouples(couples);

            return ReturnObject.SUCCESS(res);
        }else{
            return ReturnObject.ERROR("status 状态错误");
        }
    }

    //获取情侣信息
    @GetMapping("/feign/getCouplesInfo/{userId}")
    public ReturnObject<Couples> getCouplesInfo(@PathVariable("userId") Integer userId){
        //获取情侣关系信息
        Couples couples = couplesService.getCouplesInfo(userId);
        //调换一下位置 让自己总是myUserID
        if(couples.getToUserId().equals(userId)){
            Integer touserId = couples.getMyUserId();
            couples.setMyUserId(userId);
            couples.setToUserId(touserId);
        }
        return ReturnObject.SUCCESS(couples);
    }
}
